package com.sharp.core.math.primitives;

import com.sharp.core.math.Matrix;
import com.sharp.core.math.Trig;
import com.sharp.core.math.Vec3;
import com.sharp.core.raytrace.Ray;

/**
 * Egy olyan Plane, amit 2 vektor határoz meg. A két vektor a 
 * Plane középpontjából indul, és X és Y irányban a Plane szélességéig
 * terjednek.
 * 
 * +------------+
 * |            |
 * |     ------>|
 * |     |      |
 * |     ˇ      |
 * +------------+   x, y
 * 
 * A plane <code>pos</code>-a a közepe.
 * 
 * @author sharp
 *
 */
public class CameraPlane extends Primitive {

	private Vec3 planeX, planeY;	// Vectorok a világ koordinátarendszerében
	
	public CameraPlane(int screenW, int screenH, int fieldOfView, float z) {
		float ratio = (float)screenH / screenW;
		planeX = new Vec3(1, 0, 0);
		planeX.multiply(Trig.tan(fieldOfView/2));
		
		planeY = new Vec3(0, 1, 0);
		planeY.multiply(planeX.length() * ratio);
		
		setPos(new Vec3(0, 0, z));
	}
	

	@Override
	public float intersect(Ray ray) {
		return 0;
	}

	@Override
	public void transform(Matrix m) {
		m.transform(planeX);
		m.transform(planeY);
	}

	public Vec3 getPlaneX() {
		return planeX;
	}

	public void setPlaneX(Vec3 planeX) {
		this.planeX = planeX;
	}

	public Vec3 getPlaneY() {
		return planeY;
	}

	public void setPlaneY(Vec3 planeY) {
		this.planeY = planeY;
	}


	@Override
	public Vec3 normal(Vec3 pos) {
		// cross product of planeX and planeY
		return null;
	}
	
	
}
